/***
 * @description order 数据操作
 * @author zhang
 */

const Order = require('../../models/Order')
const Address = require('../../models/Address')
const Shop = require('../../models/Shop')
const Product = require('../../models/Product')

const requestBody = {
  addressId: "60def7d52055b939c44bd236",
  shopId: "60df0834f1ed4f3458a30dbf",
  shopName: "沃尔玛",
  isCanceled: true, // 订单是否被取消
  products: [
    {
      id: "60df169256b19238e8118670",
      num: 3, // 购买数量
    },
    {
      id: "60df169256b19238e8118673",
      num: 3, // 购买数量
    },
  ],
};

!(async () => {
  //  获取 收货地址
  const address = await Address.findById(requestBody.addressId);
  // for(let i of requestBody.products) {
  //     const product = await Product.findById(i.id);
  //     i.product = product
  //     i.orderSales = i.num
  // }
  // 获取前端发来的Id 然后转换成一个数组
  const productIdList = requestBody.products.map(item => {
    return item.id
  })
  // 查询数据库的商品
  const ProductDbList = await Product.find({
    shopId: requestBody.shopId, // 条件1 通过商店id
    _id: { // 条件2 通过商品Id
      $in: productIdList // 使用$in 方法，查询是否能和id数组中的id 匹配上
    },
  });
  // 使用map 方法，拼接products数组中的商品和商品数量
  const newProductList = ProductDbList.map(item => {
    const newId = item._id.toString() // 获取数据库中商品的id
    const filterProducts =  requestBody.products.filter(item =>{return item.id === newId}) // 通过数据库商品和前端商品id 的比较，筛选出新的 前端商品数据和商品数量组成的对象数组
    if(filterProducts.length === 0 ) {
      throw Error('未找到匹配的销售数据')
    }// 没匹配上，抛出错误
    return {// 返回一个由商品和商品数量拼接的对象，
      product: item,
      orderSales: filterProducts[0].num,
    }
  })
  console.log(newProductList) // 由拼接的对象 组成的数组

  // 数据库创建订单数据
  await Order.create({
    username: "zhangsan",
    shopId: requestBody.shopId,
    shopName: requestBody.shopName,
    isCanceled: requestBody.isCanceled,
    address,
    products: newProductList
  });
})()

// 获取店铺信息 
// const shop = Shop.findById(requestBody.shopId)
